/*
1:下载axios
2:导入axios
3:创建axios副本（个性化配制axios）
4:设置副本的请求拦截与响应拦截
5：暴露出去
6：在api中导入使用

环境变量  process.env.NODE_ENV
  开发环境
      根目录创建 .env.development
      定义变量
         VUE_APP_开头  如：VUE_APP_XXX = "123456"
      访问：process.env.VUE_APP_XXX
  生产环境
      根目录创建 .env.production
      定义变量
         VUE_APP_开头  如：VUE_APP_XXX = "111111"
      访问：process.env.VUE_APP_XXX

  测试环境（自定义环境）
      根目录创建 .env.test
      定义变量
         VUE_APP_开头  如：VUE_APP_XXX = "2222"
      访问：process.env.VUE_APP_XXX
      配制package.json
         build:test'..... --mode test'
         npm run build:test

*/
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
import i18n from '@/lang'
const instance = axios.create({
  // baseURL: 'http://localhost:3000/api', // 本地接口配制ok的同学
  // baseURL: 'http://119.91.150.211:3000/api', // 本地接口配制ok的同学
  // baseURL: '/abc', // 本地接口配制ok的同学
  // baseURL: 'http://ihrm-java.itheima.net/api', // 本地接口配制ok的同学
  // baseURL: process.env.NODE_ENV === 'development' ? '/abc' : 'http://ihrm-java.itheima.net/api', // 本地接口配制ok的同学
  baseURL: process.env.VUE_APP_URL, // 本地接口配制ok的同学
  withCredentials: true, // 跨域是否带cookie,默认是false
  timeout: 5000
})
// 国际化：中国接口返回中文，美国：返回英文
instance.interceptors.request.use((config) => {
  /*
  1:如果接口不需要token,加了无所谓
    if (store.state.user.token) {
    config.headers.Authorization = `Bearer ${store.state.user.token}`
  }
  2：如果接口不需要token,加了报错
    不需要加token的api配制加上  noToken:true
    if (!config.noToken) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
  */
  if (store.state.user.token) {
    config.headers.Authorization = `Bearer ${store.state.user.token}`
  }
  // console.log('config', config)
  const code = config.url.includes('?') ? '&' : '?'
  config.url += code + 'lang=' + i18n.locale
  return config
}, (err) => {
  return Promise.reject(err)
})
// 响应拦截
instance.interceptors.response.use((res) => {
  // 状态码2开头
  /*
    if(成功){
      return res.data
    }else{
      提示错误信息
      return Promise.reject(new Error(错误信息))
    }

  */
  if (res.data.success) {
    return res.data
  } else {
    Message.error(res.data.message)
    return Promise.reject(new Error(res.data.message))
    // return Promise.reject(res.data.message)
  }
}, (err) => {
  // token失效  做什么？识别到401   删除token 提示  删除用户信息  跳转到登录页
  if (err.response && err.response.status === 401) {
    // 提示
    Message.error(err.response.data.message)
    //  删除token   删除用户信息
    store.commit('user/LOGOUT')
    // 跳转到登录页
    router.push('/login')
  }
  // 状态码非2开头
  return Promise.reject(err)
})
export default instance

// instance({...})状态码是402.then().catch()

/*
打包
  非上线打包：基地址
  上线打包：  基地址
  1：路由懒加载
  2：publicPath:'./'
  3:productionSourcemap:false

*/
